#include <stdio.h>
#include <stdlib.h>
int n;

typedef struct Tree
{
    int sun;
    int data;
    struct Tree *next[10000];
    struct Tree *Root;
}TREE;



int min(int a,int b)
{
    return a>b?b:a;
}

TREE *ROOT(TREE *tree)
{
    TREE *root=tree;
    while(root->Root)
    {
        root=root->Root;
    }
    return root;
}

void selve(TREE *root,int dp[][2])
{

    TREE *p=root;
    if(p->sun==0)
        return;
    else
    {
        for(int i=0;i<p->sun;i++)
        {
            selve(p->next[i],dp);
            dp[p->data][0]+=dp[p->next[i]->data][1];
            dp[p->data][1]+=min(dp[p->next[i]->data][0],dp[p->next[i]->data][1]);
        }
    }




//    dp[p->next[i]->data][0]+=dp[p->data][1];
//    dp[p->next[i]->data][1]+=min(dp[p->data][0],dp[p->data][1]);
}




int main(void) {
    while(scanf("%d",&n)!=EOF)
    {
        TREE * tree[n];
        int dp[n][2];
        for(int i=0;i<n;i++)
        {
            dp[i][0]=0;
            dp[i][1]=1;
            tree[i]=malloc(sizeof(TREE));
            tree[i]->Root=NULL;
            tree[i]->sun=0;
        }
        int m,k,t;
        for(int i=0;i<n;i++) {
            scanf("%d:(%d)", &k, &m);
            tree[k]->sun=m;
            tree[k]->data=k;
            for(int i=0;i<m;i++)
            {
                tree[k]->next[i]=malloc(sizeof(TREE));
                scanf("%d",&t);
                tree[k]->next[i]=tree[t];
                tree[t]->Root=tree[k];
            }
        }
        TREE *root=ROOT(tree[0]);
        selve(root,dp);
//        for(int i=0;i<n;i++)
//        {
//            printf("%d:\t%d\t%d\n",i,dp[i][0],dp[i][1]);
//        }
        printf("%d\n",min(dp[root->data][0],dp[root->data][1]));
    }
    return 0;
}
